/**
 * @content 扩展字段头功能组件
 * @author  2019-09-16
 */
import { NativeModules } from 'react-native';

let EF = NativeModules.JSExtField;

/**
 * @class ExtField
 * @description 扩展字段头
 */
export default class ExtField {
  /**
   * 构造一个新的 ExtField 对象。
   * @memberOf ExtField
   * @returns {Promise.<ExtField>}
   */
  async createObj() {
    try {
      if (
        typeof arguments[0] === 'number' &&
        typeof arguments[1] === 'number'
      ) {
        var { ExtFieldId } = await EF.createObj(arguments[0], arguments[1]);
        var extField = new ExtField();
        extField._MGExtFieldId = ExtFieldId;
        return extField;
      }
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 获取别名
   * @memberOf ExtField
   * @return {Promise<*>}别名
   */
  async getAlias() {
    try {
      return await EF.getAlias(this._MGExtFieldId);
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 设置别名
   * @memberOf ExtField
   * @param alias 别名
   * @return {Promise<void>}
   */
  async setAlias(alias) {
    try {
      await EF.setAlias(this._MGExtFieldId, alias);
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 获取是否允许为空
   * @memberOf ExtField
   * @return {Promise<*>}true/false
   */
  async getIsNull() {
    try {
      return await EF.getIsNull(this._MGExtFieldId);
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 设置是否允许为空
   * @memberOf ExtField
   * @param value true/false
   * @return {Promise<void>}
   */
  async setIsNull(value) {
    try {
      await EF.setIsNull(this._MGExtFieldId, value);
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 获取域ID
   * @memberOf ExtField
   * @return {Promise<*>}ID值
   */
  async getDmnID() {
    try {
      return await EF.getDmnID(this._MGExtFieldId);
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 设置域ID
   * @memberOf ExtField
   * @param value ID值
   * @return {Promise<void>}
   */
  async setDmnID(value) {
    try {
      await EF.setDmnID(this._MGExtFieldId, value);
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 获取字段形态
   * @memberOf ExtField
   * @return {Promise<*>}字段形态
   */
  async getShape() {
    try {
      return await EF.getShape(this._MGExtFieldId);
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 设置字段形态
   * @memberOf ExtField
   * @param shape 字段形态
   * @return {Promise<void>}
   */
  async setShape(shape) {
    try {
      await EF.setShape(this._MGExtFieldId, shape);
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 获取取离散值数目
   * @memberOf ExtField
   * @return {Promise<*>}数目
   */
  async getShapeInfoNum() {
    try {
      return await EF.getShapeInfoNum(this._MGExtFieldId);
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 获取字段类型
   * @memberOf ExtField
   * @return {Promise<*>}字段类型
   */
  async getFieldType() {
    try {
      return await EF.getFieldType(this._MGExtFieldId);
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 是否设置缺省值
   * @memberOf ExtField
   * @return {Promise<*>}非0/0 ：是/否
   */
  async hasDefVal() {
    try {
      return await EF.hasDefVal(this._MGExtFieldId);
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 是否设置最大值
   * @memberOf ExtField
   * @return {Promise<*>} 非0/0 ：是/否
   */
  async hasMaxVal() {
    try {
      return await EF.hasMaxVal(this._MGExtFieldId);
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 是否设置最小值
   * @memberOf ExtField
   * @return {Promise<*>} 非0/0 ：是/否
   */
  async hasMinVal() {
    try {
      return await EF.hasMinVal(this._MGExtFieldId);
    } catch (e) {
      console.error(e);
    }
  }
}
